package com.jtbd.dto.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jtbd.domain.CourseClass;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.util.ObjectUtils;

import java.sql.Time;
import java.util.Date;

@Schema(description = "课程班级的数据类")
@Data
public class CourseClassItemHttpDto {

    @Schema(description = "班级ID")
    private Long id;

    @Schema(description = "班级名称")
    @NotBlank(message = "班级名称不能为空")
    private String className;

    @Schema(description = "课程ID")
    @NotNull(message = "课程ID不能为空")
    private Long courseId;

    @Schema(description = "跟班老师id")
    private Long teacherId;

    /**
     * 班级最大人数
     */
    @Schema(description = "班级最大人数")
    private Integer maxStudents;

    /**
     * 班级上课开始时间
     */
    @Schema(description = "班级上课开始时间")
    @NotNull(message = "班级上课开始时间不能为空")
    @DateTimeFormat(pattern = "HH:mm:ss")
    @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
    private Time classStartTime;

    /**
     * 班级上课结束时间
     */
    @Schema(description = "班级上课结束时间")
    @NotNull(message = "班级上课结束时间不能为空")
    @DateTimeFormat(pattern = "HH:mm:ss")
    @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
    private Time classEndTime;

    /**
     * 班级开课日期
     */
    @Schema(description = "班级开课日期")
    @NotNull(message = "班级开课日期不能为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date classDate;

    /**
     * 班级每周星期几上课？英文逗号分割 取值范围在1-7
     */
    @Schema(description = "班级每周星期几上课？英文逗号分割 取值范围在1-7")
    @NotBlank(message = "班级每周星期几上课？英文逗号分割 取值范围在1-7不能为空")
    private String classWeekday;

    /**
     * 班级状态 1正常 2停课 3结课
     */
    @Schema(description = "班级状态 1正常 2停课 3结课")
    private Integer classStatus;

    /**
     * 班级备注
     */
    @Schema(description = "班级备注")
    private String classRemark;

    /**
     * 将CourseClassItemHttpDto对象转换为CourseClass对象
     *
     * @param item CourseClassItemHttpDto对象，包含课程班级的基本信息
     * @return CourseClass对象，转换后的课程班级实体
     */
    public static CourseClass toCourseClass(CourseClassItemHttpDto item) {
        CourseClass courseClass = new CourseClass();
        // 设置课程班级的基本属性信息
        if (!ObjectUtils.isEmpty(item.getId())) courseClass.setId(item.getId());
        courseClass.setClassName(item.getClassName());
        courseClass.setCourseId(item.getCourseId());
        courseClass.setTeacherId(item.getTeacherId());
        courseClass.setMaxStudents(item.getMaxStudents());
        courseClass.setClassStartTime(item.getClassStartTime());
        courseClass.setClassEndTime(item.getClassEndTime());
        courseClass.setClassDate(item.getClassDate());
        courseClass.setClassWeekday(item.getClassWeekday());
        courseClass.setClassStatus(item.getClassStatus());
        courseClass.setClassRemark(item.getClassRemark());
        return courseClass;
    }

}
